package bavaria.hightech.konto;

import bavaria.hightech.Buchung.Buchungsliste;
import bavaria.hightech.Exceptions.MinusException;
import bavaria.hightech.banking.Money;
import bavaria.hightech.banking.WE;
import bavaria.hightech.zeit.Zeitgeber;



public abstract class Konto{
	private int kontonummer;
	protected Money money;
	private String kontoinhaber;
	public Buchungsliste list = new Buchungsliste();
	private int i =1;
	private static Zeitgeber zeit;
	
	Konto (int ktoNummer, String ktoInhaber, WE WEtyp)
	{
		kontonummer = ktoNummer;
		kontoinhaber = ktoInhaber;
		money = new Money(0, WEtyp);
	}
	
	abstract public void abheben (String grund, Money betrag) throws MinusException;
	abstract public String konditionenToString();
	
	
	public void einzahlen (String grund, Money betrag){
		this.verbuchen(grund, betrag);
	}
	
	public int getKontonummer(){
		return kontonummer;
	}
	
	public String listToString(){
		return list.toString();
	}
	
	public Buchungsliste getList(){
		return list;
	}
	
	public long getKontostand(){
		return money.getBetrag();
	}
	
	public Money getMoney(){
		return money;
	}
	
	public String getKontoinhaber(){
		return kontoinhaber;
	}
	
	public String toString(){
		return ("Kontonummer: " + kontonummer + "     Kontoinhaber: "+ kontoinhaber + "     Kontostand: "+ money.toString());
	}
	
	public void printList(){
		System.out.println(list.toString());
	}
	
	public void clearList(){
		list.clear();
	}
	
	public static void setZeit(Zeitgeber zeiten){
		zeit = zeiten;
	}
	public void verbuchen (String grund, Money betrag){
		money.addieren(betrag);
		String buchung = i + ".Buchung: " + betrag + " Grund: " + grund + " Datum: " + zeit.getZeit();
		list.add(list.anfang, buchung);
		i++;
	}
	
	public abstract void verzinsen() throws MinusException;
	
}







